package com.common.utils;

import android.content.Context;
import android.os.Environment;

import java.io.File;
import java.math.BigDecimal;

// 当你在项目中需要查下缓存大小，就使用getTotalCacheSize(Context)方法，
// 清空缓存，就使用clearAllCache(Context)方法
public class DataCleanManager {  
    public static String getTotalCacheSize(Context context) throws Exception {
           long cacheSize = getFolderSize(context.getCacheDir());  
           if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
               cacheSize += getFolderSize(context.getExternalCacheDir());  
           }    
           return getFormatSize(cacheSize);  
       }  
   
   
   public static void clearAllCache(Context context) {
       deleteDir(context.getCacheDir());  
       if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
           deleteDir(context.getExternalCacheDir());  
       }    
   }  
   
   private static boolean deleteDir(File dir) {
       if (dir != null && dir.isDirectory()) {  
           String[] children = dir.list();
           for (int i = 0; i < children.length; i++) {  
               boolean success = deleteDir(new File(dir, children[i]));
               if (!success) {  
                   return false;  
               }  
           }  
       }  
       return dir.delete();  
   }  
       
   // 获取文件    
   //Context.getExternalFilesDir() --> SDCard/<a target="_blank" href="http://www.2cto.com/kf/yidong/Android/" class="keylink" style="border:none; padding:0px; margin:0px; color:rgb(51,51,51); text-decoration:none; font-size:14px; background:none">Android</a>/data/你的应用的包名/files/ 目录，一般放一些长时间保存的数据    
   //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录，一般存放临时缓存数据    
   public static long getFolderSize(File file) throws Exception {
       long size = 0;    
       try {    
           File[] fileList = file.listFiles();
           for (int i = 0; i < fileList.length; i++) {    
               // 如果下面还有文件    
               if (fileList[i].isDirectory()) {    
                   size = size + getFolderSize(fileList[i]);    
               } else {    
                   size = size + fileList[i].length();    
               }    
           }    
       } catch (Exception e) {
           e.printStackTrace();    
       }    
       return size;    
   }    
       
   /**  
    * 格式化单位  
    *   
    * @param size  
    * @return  
    */    
   public static String getFormatSize(double size) {
       double kiloByte = size / 1024;    
       if (kiloByte < 1) {    
//           return size + "Byte";    
           return "0K";  
       }    
   
       double megaByte = kiloByte / 1024;    
       if (megaByte < 1) {    
           BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
           return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
                   .toPlainString() + "KB";    
       }    
   
       double gigaByte = megaByte / 1024;    
       if (gigaByte < 1) {    
           BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
           return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
                   .toPlainString() + "MB";    
       }    
   
       double teraBytes = gigaByte / 1024;    
       if (teraBytes < 1) {    
           BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
           return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
                   .toPlainString() + "GB";    
       }    
       BigDecimal result4 = new BigDecimal(teraBytes);
       return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
               + "TB";    
   }    
}  
